﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmVerificarUsuarioMenu : Form
    {
        [Dependency]
        public IUsuarioBL usuarioBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        [Dependency]
        public IPersonaBL personaBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabBL { get; set; }

        [Dependency]
        public IAreaLiquidacionBL arealiquidacionBL { get; set; }

        public FrmVerificarUsuarioMenu()
        {
            InitializeComponent();
            this.BuildUp();
            aREALIQUIDACIONBindingSource.DataSource = arealiquidacionBL.GetAllFromArea();
        }

        FrmMttoUsuario frm = new FrmMttoUsuario();

        bool isNew = true;

        public void Nuevo()
        {
            isNew = true;
            uSUARIOBindingSource.AddNew();
            rOLBindingSource.AddNew();
            btnGuardar.Enabled = true;
            btnCancel.Enabled = true;
            btnEditar.Enabled = false;
        }

        public void Editar()
        {
            isNew = false;
            btnGuardar.Enabled = false;
            btnEditar.Enabled = true;
            btnCancel.Enabled = true;
        }

        public USUARIO CurrentUsuario { get; set; }
        public ROL CurrentRol { get; set; }

        private void FrmVerificarUsuarioMenu_Load(object sender, EventArgs e)
        {
            cargar();
            EnableDisable();
        }

        public void cargar()
        {
            if (CurrentUsuario != null || CurrentRol != null)
            {
                uSUARIOBindingSource.DataSource = CurrentUsuario;
                rOLBindingSource.DataSource = CurrentRol;
                uSUARIO_MENUBindingSource.DataSource = CurrentUsuario.USUARIO_MENU;
                if (CurrentUsuario.IdAreaLiquidacion != 0)
                {
                    chbVerLiquidaciones.Checked = CurrentUsuario.VerLiquidaciones;
                }
                else
                {
                    cbAreaLiquidacion.DataSource = arealiquidacionBL.GetAllFromArea();
                }                
            }
        }

        /*función de encriptacion MD5 para password*/
        public string md5()
        {
            System.Security.Cryptography.MD5 md5;
            md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

            byte[] encodedBytes = md5.ComputeHash(ASCIIEncoding.Default.GetBytes(contraseñaTextBox.Text));

            return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(encodedBytes).ToUpper(), @"-", "");
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var usuario = uSUARIOBindingSource.Current as USUARIO;

            var msg = "ERROR";

            var trab = (from t in trabBL.GetAllFromTrabajador()
                        where t.Id.Equals(usuario.IdTrabajador)
                        select t).SingleOrDefault();

            /*usuario.TRABAJADOR = null;
            usuario.TRABAJADOR.IdBanco = trab.IdBanco;
            usuario.TRABAJADOR.IdEstudios = trab.IdEstudios;
            usuario.TRABAJADOR.IdReferencia = trab.IdReferencia;
            usuario.TRABAJADOR.IdRegimenPensionario = trab.IdRegimenPensionario;
            usuario.TRABAJADOR.IdRural = trab.IdRural;
            usuario.TRABAJADOR.IdSocio = trab.IdSocio;
            usuario.TRABAJADOR.IdUbicacionTrabajador = trab.IdUbicacionTrabajador;
            usuario.TRABAJADOR.IdUbigeo = trab.IdUbigeo;*/

            if (usuario != null)
            {
                try
                {
                    if (chbVerLiquidaciones.Checked)
                    {
                        usuario.VerLiquidaciones = true;
                        //usuario.IdAreaLiquidacion = cbAreaLiquidacion.SelectedIndex;
                    }
                    else
                    {
                        usuario.VerLiquidaciones = false;
                        usuario.IdAreaLiquidacion = 1;
                    }

                    usuario.Contraseña = md5();
                    usuarioBL.AddUsuario(usuario);
                    MessageBox.Show("Resgistro Correcto", "Mensaje", MessageBoxButtons.OK);
                    
                    this.Close();
                    frm.Close();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var usuario = uSUARIOBindingSource.Current as USUARIO;
            if (usuario != null)
            {
                if (chbVerLiquidaciones.Checked)
                {
                    usuario.VerLiquidaciones = true;
                    //usuario.IdAreaLiquidacion = cbAreaLiquidacion.SelectedIndex;
                }
                else
                {
                    usuario.VerLiquidaciones = false;
                    usuario.IdAreaLiquidacion = 1;
                }

                usuarioBL.UpdateUsuario(usuario);
                MessageBox.Show("Modificación Correcta", "Mensaje", MessageBoxButtons.OK);
                this.Close();
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void chbVerLiquidaciones_Click(object sender, EventArgs e)
        {
            EnableDisable();
        }

        private void EnableDisable()
        {
            if (chbVerLiquidaciones.Checked)
            {
                cbAreaLiquidacion.Enabled = true;
            }
            else
            {
                cbAreaLiquidacion.Enabled = false;
            }
        }
    }
}
